<?php
/**
 * główna klasa odpowiedzialna za wyświetlanie strony
 * 
 * w modelu MVC jest to część widoku
 */
class Theme {
	/**
	 * kod html strony
	 * @var string
	 * @static
	 * @access private
	 */
	private static $html = '';
	/**
	 * miejsce na dane do wyświetlenia	
	 * @static
	 * @access private
	 */
	private static $data;
	/**
	 * nazwa szablonu do wyświetlenia
	 * @static
	 * @access private
	 */
	private static $name;
	/**
	 * inicjuje generowanie kodu HTML szablonu
	 * @static
	 * @access public
	 * @param string $name nazwa szablonu
	 * @param mixed[] $data dane do wyświetlenia
	 */
	public static function init($name, $data) {
		self::$name = $name;
		self::$data = $data;
		self::select();
	}
	/**
	 * na podstawie nazwy wybiera szablon do wyświetlenia
	 * @static
	 * @access private
	 */
	private static function select () {
		switch (self::$name) {
			case 'all' :
				self::all();
				break;
			case 'single':
				self::single();
				break;
		}
	}
	/**
	 * szablon wyświetlający wszystkie ogłoszenia
	 * @static
	 * @access private
	 */
	private static function all () {
		$allAds = new Part\AllAds(self::$data['ad']);
		self::startDocument();
		self::buildHead();
		self::startBody();
		self::$html .= "\n".$allAds->getHTML();
		self::$html .= "\n".self::showCategoryTree();
		self::endDocument();
	}
	/**
	 * szablon wyświetlający pojedyncze ogłoszenie
	 * @static
	 * @access private
	 */
	private static function single () {
		$ad = new Part\SingleAd(self::$data['ad']);
		self::startDocument();
		self::buildHead();
		self::startBody();
		self::$html .= "\n".$ad->getHTML();
		self::$html .= "\n".self::showCategoryTree();
		self::endDocument();
	}
	/**
	 * buduje sekcję head strony
	 * 
	 * używa do tego klasę Part\HeadSection
	 * @static
	 * @access private
	 */
	private static function buildHead () {
		$h = new Part\HeadSection();
		self::$html .= $h->getHTML();
	}
	/**
	 * rozpoczyna sekcję body
	 * @static
	 * @access private
	 */
	private static function startBody () {
		self::$html .= "\n\t".'<body>';
	}
	/**
	 * rozpoczyna dokument
	 * @static
	 * @access private
	 */
	private static function startDocument () {
		self::$html = '<!DOCTYPE html>'."\n".'<html>';
	}
	/**
	 * kończy dokument
	 * @static
	 * @access private
	 */
	private static function endDocument () {
		self::$html .= "\n\t".'</body>'."\n".'</html>';
	}
	private static function showCategoryTree () {
		$log = new Log('Theme::showCategoryTree');
		$catTree = new Part\CategoryTree(self::$data['category']);
		self::$html .= $catTree->getHTML();	
	}
	/**
	 * zwraca kod html
	 * @static
	 * @access public
	 */
	public static function getHTML () {
		return self::$html;
	}
}
?>